Op deze pagina vind je een demonstratie van een statistische techniek aan de hand van een voorbeeld.
Meer informatie over hoe je deze pagina kan gebruiken vind je in deze handleiding.
De analyse gebeurt met behulp van R en RStudio. Een inleiding tot deze software vind je hier.
Referentie
Lineaire regressie is een statistische techniek die je kan gebruiken om een hypothese te toetsen over het effect van een variabele (een onafhankelijke variabele of predictor) op een andere variabele (de afhankelijke variabele of uitkomst). In lineaire regressie is die afhankelijke variabele altijd continu, dus ten minste van intervalniveau.
Zo goed als altijd zal je moeten controleren voor extra predictoren die het resultaat van de toetsing kunnen beĂŻnvloeden.
Op deze pagina kom je te weten hoe je zoân hypothesetoetsing kan uitvoeren in het geval dat de predictor een categorische variabele is.
De dataset dataVertrouwen
bevat gegevens van 7 variabelen geobserveerd bij 1217 Belgen.
Deze dataset kan je inladen met read.csv()
. De data kan je best meteen in een object dataVertrouwen
onderbrengen zodat je die later makkelijk opnieuw kan oproepen.
dataVertrouwen <- read.csv("https://statlas.ugent.be/datasets/vertrouwen.csv")
Met str()
krijg je een opsomming van alle variabelen in de dataset. Je vindt er ook telkens bij om welk datatype het gaat. Afhankelijk van het datatype zal je sommige functies wel of juist niet kunnen gebruiken om je data te verkennen. Het heeft bijvoorbeeld geen zin om een gemiddelde te berekenen van een variabele van type chr
.
str(dataVertrouwen)
'data.frame': 1217 obs. of 7 variables:
$ X : int 1 2 3 4 5 6 7 8 9 10 ...
$ vertrouwen: num 2.85 -3.74 -1.74 -2.71 0.22 ...
$ sesKind : num 0.296 4.213 0.317 0.296 4.856 ...
$ sesVolw : num -0.27 -2.33 2.48 2.48 1.09 ...
$ geslacht : chr "Man" "Man" "Vrouw" "Vrouw" ...
$ wrkls : chr "Ja" "Ja" "Nee" "Ja" ...
$ burgst : chr "nooit getrouwd" "feitelijk gescheiden" "getrouwd" "getrouwd" ...
In de output van str()
zie je inderdaad dat er 7 variabelen zijn met telkens 1217 observaties.
Je kan een model bouwen met de functie lm()
. Het eerste argument van die functie is een formule waarin je specifieert welke variabelen je in het model wil opnemen:
~
predictoren gescheiden door een +
In het tweede argument bepaal je uit welk dataframe de variabelen komen. Hier is dat dataVertrouwen
.
Zoân model kan je in een object met een eenvoudige naam stoppen.
mijnModel <- lm(vertrouwen ~ sesKind + sesVolw + burgst + wrkls + geslacht, data = dataVertrouwen)
Met de functie summary()
kan je heel veel informatie over het model oproepen. Als argument geef je gewoon het object mijnModel
.
summary(mijnModel)
Call:
lm(formula = vertrouwen ~ sesKind + sesVolw + burgst + wrkls +
geslacht, data = dataVertrouwen)
Residuals:
Min 1Q Median 3Q Max
-5.7908 -1.5647 -0.0545 1.5608 6.9194
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 0.40784 0.51988 0.784 0.43291
sesKind -0.07147 0.03436 -2.080 0.03774 *
sesVolw 0.32933 0.03814 8.634 < 2e-16 ***
burgstgetrouwd -0.44809 0.50093 -0.895 0.37123
burgstnooit getrouwd -0.55005 0.51172 -1.075 0.28263
burgstsamenlevingscontract -1.41825 0.54923 -2.582 0.00993 **
burgstweduwe/weduwnaar 0.18910 0.55128 0.343 0.73164
burgstwettelijk gescheiden -0.93027 0.54211 -1.716 0.08642 .
wrklsNee 0.16151 0.18257 0.885 0.37652
geslachtVrouw -0.04919 0.12493 -0.394 0.69386
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 2.147 on 1207 degrees of freedom
Multiple R-squared: 0.08093, Adjusted R-squared: 0.07408
F-statistic: 11.81 on 9 and 1207 DF, p-value: < 2.2e-16
De regressiecoëfficiënten vind je in de kolom Estimate. Meer uitleg over de interpretatie van deze coëfficiënten vind je hier, voornamelijk onderaan p.228 en onder 10.2.4 en 10.2.5. Merk op dat R standaard dummy-codering toepast.
Hypothesetoetsing met lineaire regressie is enkel een bruikbare en betrouwbare techniek als aan een reeks voorwaarden is voldaan. Die moet je verifiëren vooraleer je met de interpretatie mag beginnen.
De Gauss-Markovassumpties en de normaliteitsassumptie van de fouten kan je nagaan met plot()
. Dit commando geeft je vier plots na elkaar. De eerste drie zijn relevant. In dit geval lijkt alles in orde en mag je verdergaan met de analyse.
Meer uitleg over de assumpties en deze plots vind je hier (vanaf 9.9).
plot(mijnModel)
Een laatste aandachtspunt vooraleer je tot de hypothesetoetsing kan overgaan, is collineariteit. Dat is een situatie waarbij predictoren sterk gecorreleerd zijn. Met de functie vif()
uit het R-package car
kan je te weten komen of er in jouw model een probleem is met collineariteit. Als de variance inflation factor bij elke variabele in de buurt van 1 ligt, mag je verder met de analyse.
library(car)
vif(mijnModel)
GVIF Df GVIF^(1/(2*Df))
sesKind 1.010140 1 1.005057
sesVolw 1.118624 1 1.057650
burgst 1.161549 5 1.015088
wrkls 1.057608 1 1.028401
geslacht 1.030211 1 1.014993
Meer uitleg over collineariteit vind je hier.
Stel: je vermoedt dat iemands familiale situatie een invloed heeft op het vertrouwen in anderen.
Om data te verzamelen over de familiale situatie vraag je mensen naar hun burgerlijke staat burgst
. Dat is in dit geval de predictor.
De afhankelijke variabele is vertrouwen
. Deze continue variabele is gebaseerd op een reeks vragen uit een enquĂȘte.
De hypothese die je wil toetsen is: er is op populatieniveau een effect van iemands familiale situatie op het vertrouwen in andere mensen.
Omdat je met een categorische predictor burgst
te maken hebt, moet je deze hypothese toetsen aan de hand van een modelvergelijking met de functie anova()
. Zo vergelijk je het model waarin burgst
als predictor is opgenomen met een tweede model modelZonder
waarin burgst
niet is opgenomen, maar dat voor de rest wel identiek is.
Een uitgebreide uitleg over toetsing via modelvergelijking vind je hier, voornamelijk onder 4.4.2.
We controleren ook voor nog andere predictoren. Dat doen we omdat de conclusie over het bestaan van een effect van burgst
op vertrouwen
kan afhangen van de aanwezigheid van die extra predictoren in het model. De algemene regel is: neem elke predictor op waarvan je denkt dat die een invloed heeft op de afhankelijke variabele en/of dat die gerelateerd is aan de predictor die je onderzoekt (hier burgst
).
De nulhypothese stelt dat beide modellen even goed fitten. Het model zonder de extra predictor burgst
kan dan behouden blijven. De alternatieve hypothese houdt in dat het complexere model wel beter fit.
Net als bij elke hypothesetoets moet je een significantieniveau kiezen. Hier kiezen we voor de veelgebruikte waarde \(\alpha = 0.05\).
Om te toetsen of burgst
een effect heeft op vertrouwen
voer je een modelvergelijking uit. Eerst specifieer je een tweede model modelZonder
waarin burgst
niet is opgenomen.
modelZonder <- lm(vertrouwen ~ sesKind + sesVolw + wrkls + geslacht, data = dataVertrouwen)
Nu kan je de functie anova()
gebruiken. De output vertelt je of het model met burgst
je in staat stelt om over het algemeen betere predicties te maken van vertrouwen
dan het model zonder burgst
.
anova(modelZonder, mijnModel)
Analysis of Variance Table
Model 1: vertrouwen ~ sesKind + sesVolw + wrkls + geslacht
Model 2: vertrouwen ~ sesKind + sesVolw + burgst + wrkls + geslacht
Res.Df RSS Df Sum of Sq F Pr(>F)
1 1212 5686.5
2 1207 5563.2 5 123.25 5.3483 7.192e-05 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
De F-toets om de modellen te vergelijken levert een p-waarde op van \(7.1922811\times 10^{-5}\). Dit is veel kleiner dan 0.05, dus je kan de nulhypothese verwerpen ten voordele van de alternatieve hypothese.
Het package effects
laat je toe om eenvoudig visualisaties te maken van effecten in lineaire regressiemodellen.
install.packages('effects') # eenmalig het package installeren
library(effects) # package laden voor gebruik
plot(effect('burgst', mijnModel), # let op de aanhalingstekens rond burgst
axes=list(x=list(rotate=90))) # met dit argument draai je de namen van de niveaus van burgst
Mell H., Safra L., Demange P., Algan Y., Baumard N. & Chevallier C. (2021). Early life adversity is associated with diminished social trust in adults. Political Psychology. doi: 10.1111/pops.12756